package com.fg.cloud.manager.service.system;

import java.util.List;
import java.util.Set;

import com.fg.cloud.common.construction.Resource;
import com.fg.cloud.common.construction.Tree;
import com.fg.cloud.manager.entry.system.MenuEntity;
import com.fg.cloud.manager.service.BaseService;

/**
 * @author ：
 * @date   ： 2017年6月12日 下午7:30:32
 * @Desc   ：菜单service
 */
public interface MenuService extends BaseService {
	
	/**
	  * Description:系统平台删除菜单
	  * @param id
	  * @param number
	  * @return
	  * @author shaoqiping
	  * @date 2017年11月6日下午3:17:10
	*/
	public boolean sysDeletes(Long id, String number);
	/**
	  * Description:TODO
	  * @param id
	  * @param seq
	  * @param changeId
	  * @param changeSeq
	  * @return
	  * @author shaoqiping
	  * @date 2017年11月7日下午3:28:53
	*/
	public boolean move(Long id, Integer seq, Long changeId,
			Integer changeSeq);
	/**
	  * Description:动态插入
	  * @param entity
	  * @return
	  * @author shaoqiping
	  * @date 2017年8月17日上午9:45:01
	*/
	public boolean insertSelective(MenuEntity entity);
	/**
	 * 查询所有菜单，封装List<Tree>上下级关系，不包含按钮
	 * @param classify 菜单类型：0=平台菜单；1=厂家菜单；2=经销商菜单
	 * @return List
	 */
	public List<Tree> findAllMenu(Integer classify);
	
	/**
	 * 菜单查询列表界面 -- 查询所有资源，包含上下级关系
	 * @param classify 菜单类型：0=平台菜单；1=厂家菜单；2=经销商菜单
	 * @return List<Tree>
	 */
	public List<Tree> findList(Integer classify);
	
	/**
	 * 根据角色ID获取对应的菜单权限，并加载状态
	 * @param roleId
	 * @param classify 菜单类型：0=平台菜单；1=厂家菜单；2=经销商菜单;3=设置菜单
	 * @return List<Tree>
	 */
	List<Tree> findByRoleId(Long roleId, Integer classify);
	
	/**
	 * 根据用户ID获取对应的菜单权限，并加载状态
	 * @param userId
	 * @param classify 菜单类型：0=平台菜单；1=厂家菜单；2=经销商菜单；3=设置菜单
	 * @return List<Resource>
	 */
	List<Resource> findByUserId(Long userId, Integer classify);
	/**
	 * 删除菜单，级联删除下级菜单
	 * @param id 菜单ID
	 * @param number 菜单编码
	 * @return true:成功
	 */
	boolean deletes(Long id, String number);
	
	/**
	 * 查询用户菜单URL权限
	 * @param userId
	 * @return
	 */
	Set<String> findMenuUrlByUserId(Long userId);
}
